home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / nt / spi386.exe / UPDATE.INF < prev    next >
INI File  |  1993-09-23  |  35KB  |  1,105 lines

  1. ;
  2. ; KEYED SECTIONS.  These sections are provided for files where a selection
  3. ; is made from a set of files and the chosen one is copied under a generic
  4. ; name.  This can be used to update the hal.dll, ntoskrnl.exe, ntbootdd.sys,
  5. ; ntdetect.com.
  6. ;
  7.  
  8.  
  9. [FileKeyedClasses]
  10.     Hal            = hal.dll
  11.     Ntoskrnl       = ntoskrnl.exe
  12.  
  13. [FilesKeyedSections]
  14.     FilesHal       = $(STF_HALDEST)
  15.     FilesNtoskrnl  = $(STF_WINDOWSSYSPATH)
  16.  
  17. [FilesHal]
  18.  
  19.     ; for x86
  20.  
  21.     hal      = 1, hal.dll      , RENAME=$(NEWFILE)
  22.     halast   = 1, halast.dll   , RENAME=$(NEWFILE)
  23.     halcbus  = 1, halcbus.dll  , RENAME=$(NEWFILE)
  24.     hal486c  = 1, hal486c.dll  , RENAME=$(NEWFILE)
  25.     halmca   = 1, halmca.dll   , RENAME=$(NEWFILE)
  26.     halncr   = 1, halncr.dll   , RENAME=$(NEWFILE)
  27.     haloli   = 1, haloli.dll   , RENAME=$(NEWFILE)
  28.     halsm2   = 1, halsm2.dll   , RENAME=$(NEWFILE)
  29.     halsp    = 1, halsp.dll    , RENAME=$(NEWFILE)
  30.     halwyse7 = 1, halwyse7.dll , RENAME=$(NEWFILE)
  31.  
  32.     ; for mips
  33.  
  34.     ; hal      = 1, hal.dll      , RENAME=$(NEWFILE)
  35.     ; haldti   = 1, haldti.dll   , RENAME=$(NEWFILE)
  36.     ; halduomp = 1, halduomp.dll , RENAME=$(NEWFILE)
  37.     ; halfxs   = 1, halfxs.dll   , RENAME=$(NEWFILE)
  38.     ; halacr   = 1, halacr.dll   , RENAME=$(NEWFILE)
  39.  
  40.     ; for alpha
  41.  
  42.  
  43.  
  44. [FilesNtoskrnl]
  45.  
  46.     ; for x86, mips, alpha
  47.  
  48.     ntoskrnl = 1, ntoskrnl.exe , RENAME=$(NEWFILE)
  49.     ntkrnlmp = 1, ntkrnlmp.exe , RENAME=$(NEWFILE)
  50.  
  51.  
  52. ;
  53. ; REGULAR SECTIONS.  These sections are provided for files where the file
  54. ; just needs to be copied to a known destination.
  55. ;
  56.  
  57. [FileSections]
  58.     FilesPrimary        = C:
  59.     FilesOsLoader       = $(STF_OSLDEST)
  60.     FilesWinnt          = $(STF_WINDOWSPATH)
  61.     FilesSystem32       = $(STF_WINDOWSSYSPATH)
  62.     FilesSystem         = $(STF_WINDOWSPATH)\system
  63.     FilesDrivers        = $(STF_WINDOWSSYSPATH)\drivers
  64.     FilesConfig         = $(STF_WINDOWSSYSPATH)\config
  65.     FilesWinspool       = $(STF_WINDOWSSYSPATH)\spool
  66.     FilesPrnDriver      = $(STF_WINDOWSSYSPATH)\spool\drivers\$(!STF_PRNPLATFORM)
  67.     FilesPrnProc        = $(STF_WINDOWSSYSPATH)\spool\prtprocs\$(!STF_PRNPLATFORM)
  68.  
  69.  
  70.  
  71. ;
  72. ; FilesPrimary only covers ntldr.  For ntbootddd, a keyed section needs to
  73. ; be created.  Also this section is relevant only for x86.
  74. ;
  75. [FilesPrimary]
  76. ;    1 = 1, file1, RENAME=$(NEWFILE)
  77. ;    2 = 1, file2, RENAME=$(NEWFILE)
  78. 1 = 1, NTLDR, RENAME=$(NEWFILE)
  79.  
  80. ;
  81. ; FilesOsLoader only covers osloader.exe.  This is only relevant
  82. ;
  83. [FilesOsLoader]
  84. ;    1 = 1, file1, RENAME=$(NEWFILE)
  85. ;    2 = 1, file2, RENAME=$(NEWFILE)
  86.  
  87. [FilesWinnt]
  88. ;    1 = 1, file1, RENAME=$(NEWFILE)
  89. ;    2 = 1, file2, RENAME=$(NEWFILE)
  90.  
  91. [FilesSystem32]
  92. ;    1 = 1, file1, RENAME=$(NEWFILE)
  93. ;    2 = 1, file2, RENAME=$(NEWFILE)
  94. 1 = 1, ATI.DLL, RENAME=$(NEWFILE)
  95. 2 = 1, BASESRV.DLL, RENAME=$(NEWFILE)
  96. 3 = 1, CLIPBRD.EXE, RENAME=$(NEWFILE)
  97. 4 = 1, DEMIL32.DLL, RENAME=$(NEWFILE)
  98. 5 = 1, DRIVERS.DLL, RENAME=$(NEWFILE)
  99. 6 = 1, DRWTSN32.EXE, RENAME=$(NEWFILE)
  100. 7 = 1, FRAMEBUF.DLL, RENAME=$(NEWFILE)
  101. 8 = 1, GDI.EXE, RENAME=$(NEWFILE)
  102. 9 = 1, IPXROUTE.EXE, RENAME=$(NEWFILE)
  103. 10 = 1, KRNL286.EXE, RENAME=$(NEWFILE)
  104. 11 = 1, KRNL386.EXE, RENAME=$(NEWFILE)
  105. 12 = 1, LSASRV.DLL, RENAME=$(NEWFILE)
  106. 13 = 1, LSASS.EXE, RENAME=$(NEWFILE)
  107. 14 = 1, MSPRIVS.DLL, RENAME=$(NEWFILE)
  108. 15 = 1, MSSCHD32.DLL, RENAME=$(NEWFILE)
  109. 16 = 1, NETRAP.DLL, RENAME=$(NEWFILE)
  110. 17 = 1, NTBACKUP.EXE, RENAME=$(NEWFILE)
  111. 18 = 1, NTVDM.EXE, RENAME=$(NEWFILE)
  112. 19 = 1, OEMNADLM.INF, RENAME=$(NEWFILE)
  113. 20 = 1, OEMNADLT.INF, RENAME=$(NEWFILE)
  114. 21 = 1, OEMNXPSM.INF, RENAME=$(NEWFILE)
  115. 22 = 1, OS2.EXE, RENAME=$(NEWFILE)
  116. 23 = 1, PERFMON.EXE, RENAME=$(NEWFILE)
  117. 24 = 1, PORTUAS.EXE, RENAME=$(NEWFILE)
  118. 25 = 1, PROGMAN.EXE, RENAME=$(NEWFILE)
  119. 26 = 1, RASCAUTH.DLL, RENAME=$(NEWFILE)
  120. 27 = 1, RPCLTC3.DLL, RENAME=$(NEWFILE)
  121. 28 = 1, RPCLTC6.DLL, RENAME=$(NEWFILE)
  122. 29 = 1, RPCRT4.DLL, RENAME=$(NEWFILE)
  123. 30 = 1, SFMMON.DLL, RENAME=$(NEWFILE)
  124. 31 = 1, SFMPRINT.EXE, RENAME=$(NEWFILE)
  125. 32 = 1, TCPIPSVC.DLL, RENAME=$(NEWFILE)
  126. 33 = 1, TELNET.DLL, RENAME=$(NEWFILE)
  127. 34 = 1, TERMINAL.EXE, RENAME=$(NEWFILE)
  128. 35 = 1, UPS.EXE, RENAME=$(NEWFILE)
  129. 36 = 1, WINMSD.EXE, RENAME=$(NEWFILE)
  130. 37 = 1, WINMSDP.EXE, RENAME=$(NEWFILE)
  131. 38 = 1, WINSPOOL.DRV, RENAME=$(NEWFILE)
  132. 39 = 1, WINSRV.DLL, RENAME=$(NEWFILE)
  133. 40 = 1, WINVER.EXE, RENAME=$(NEWFILE)
  134. 41 = 1, XACTSRV.DLL, RENAME=$(NEWFILE)
  135. 42 = 1, WOW32.DLL, RENAME=$(NEWFILE)
  136. 43 = 1, WSOCK32.DLL, RENAME=$(NEWFILE)
  137. 44 = 1, DGCONFIG.DLL, RENAME=$(NEWFILE)
  138. 45 = 1, LOCALSPL.DLL, RENAME=$(NEWFILE)
  139. 46 = 1, OEMNADDS.INF, RENAME=$(NEWFILE)
  140. 47 = 1, SFMWSHAT.DLL, RENAME=$(NEWFILE)
  141. 48 = 1, USER32.DLL, RENAME=$(NEWFILE)
  142. 49 = 1, FTPSVC.EXE, RENAME=$(NEWFILE)
  143.  
  144. [FilesSystem]
  145. ;    1 = 1, file1, RENAME=$(NEWFILE)
  146. ;    2 = 1, file2, RENAME=$(NEWFILE)
  147.  
  148. [FilesDrivers]
  149. ;    1 = 1, file1, RENAME=$(NEWFILE)
  150. ;    2 = 1, file2, RENAME=$(NEWFILE)
  151. 1 = 1, BROWSER.SYS, RENAME=$(NEWFILE)
  152. 2 = 1, CDFS.SYS, RENAME=$(NEWFILE)
  153. 3 = 1, ELNK16.SYS, RENAME=$(NEWFILE)
  154. 4 = 1, ELNKII.SYS, RENAME=$(NEWFILE)
  155. 5 = 1, ELNKMC.SYS, RENAME=$(NEWFILE)
  156. 6 = 1, FTDISK.SYS, RENAME=$(NEWFILE)
  157. 7 = 1, IBMTOK.SYS, RENAME=$(NEWFILE)
  158. 8 = 1, LANCE.SYS, RENAME=$(NEWFILE)
  159. 9 = 1, MUP.SYS, RENAME=$(NEWFILE)
  160. 10 = 1, MVAUDIO.SYS, RENAME=$(NEWFILE)
  161. 11 = 1, NBF.SYS, RENAME=$(NEWFILE)
  162. 12 = 1, NBT.SYS, RENAME=$(NEWFILE)
  163. 13 = 1, NCR77C22.SYS, RENAME=$(NEWFILE)
  164. 14 = 1, NCRC710.SYS, RENAME=$(NEWFILE)
  165. 15 = 1, NDIS.SYS, RENAME=$(NEWFILE)
  166. 16 = 1, NE3200.SYS, RENAME=$(NEWFILE)
  167. 17 = 1, NPFS.SYS, RENAME=$(NEWFILE)
  168. 18 = 1, NTFS.SYS, RENAME=$(NEWFILE)
  169. 19 = 1, PROTEON.SYS, RENAME=$(NEWFILE)
  170. 20 = 1, RDR.SYS, RENAME=$(NEWFILE)
  171. 21 = 1, SCSIDISK.SYS, RENAME=$(NEWFILE)
  172. 22 = 1, SCSIPORT.SYS, RENAME=$(NEWFILE)
  173. 23 = 1, SFMATALK.SYS, RENAME=$(NEWFILE)
  174. 24 = 1, SFMSRV.SYS, RENAME=$(NEWFILE)
  175. 25 = 1, SRV.SYS, RENAME=$(NEWFILE)
  176. 26 = 1, TCPIP.SYS, RENAME=$(NEWFILE)
  177. 27 = 1, UBNEI.SYS, RENAME=$(NEWFILE)
  178. 28 = 1, WDVGA.SYS, RENAME=$(NEWFILE)
  179. 29 = 1, 4MMDAT.SYS, RENAME=$(NEWFILE)
  180. 30 = 1, ARCHQIC.SYS, RENAME=$(NEWFILE)
  181. 31 = 1, DIGIFEP5.SYS, RENAME=$(NEWFILE)
  182. 32 = 1, NTCX.SYS, RENAME=$(NEWFILE)
  183. 33 = 1, NTXALL.SYS, RENAME=$(NEWFILE)
  184. 34 = 1, NTXEM.SYS, RENAME=$(NEWFILE)
  185. 35 = 1, S3.SYS, RENAME=$(NEWFILE)
  186.  
  187. [FilesConfig]
  188. ;    1 = 1, file1, RENAME=$(NEWFILE)
  189. ;    2 = 1, file2, RENAME=$(NEWFILE)
  190.  
  191. [FilesWinspool]
  192. ;    1 = 1, file1, RENAME=$(NEWFILE)
  193. ;    2 = 1, file2, RENAME=$(NEWFILE)
  194.  
  195. [FilesPrnDriver]
  196. ;    1 = 1, file1, RENAME=$(NEWFILE)
  197. ;    2 = 1, file2, RENAME=$(NEWFILE)
  198. 1 = 1, HPDSKJET.DLL, RENAME=$(NEWFILE)
  199. 2 = 1, JP350.DLL, RENAME=$(NEWFILE)
  200.  
  201. [FilesPrnProc]
  202. ;    1 = 1, file1, RENAME=$(NEWFILE)
  203. ;    2 = 1, file2, RENAME=$(NEWFILE)
  204.  
  205.  
  206. [ProcessorID]
  207.     ProcessorID_I386  = I386
  208.     ProcessorID_I486  = I486
  209.     ProcessorID_I586  = I586
  210.     ProcessorID_R4000 = R4000
  211.  
  212. [UiVars]
  213.     STF_PLATFORMDET    = "" ? $(!LIBHANDLE) GetPlatform
  214.     STF_CSDVER         = 2
  215.     STF_BUILDVER       = 528
  216.  
  217.     STF_PRIMARY        = "C:"
  218.     STF_NTDRIVE        = ""
  219.     STF_WINDOWSPATH    = "" ? $(!LIBHANDLE) GetWindowsNtDir
  220.     STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir
  221.     STF_CONTROLSET     = CurrentControlSet
  222.     VolumeList         = {} ? $(!LIBHANDLE) GetHardDriveLetters
  223.     VolumeFSList       = {} ? $(!LIBHANDLE) GetHardDriveFileSystems
  224.     DisketteList       = {} ? $(!LIBHANDLE) GetFloppyDriveLetters
  225.     AnyPrimaryFiles    = NO
  226.     AnyWinntFiles      = NO
  227.  
  228. [NVRAMVars]
  229.     SystemPartition = "" ? $(!LIBHANDLE) GetNVRAMVar SYSTEMPARTITION
  230.     OsLoader        = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADER
  231.     OsLoadPartition = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADPARTITION
  232.     OsLoadFilename  = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADFILENAME
  233.  
  234. ;
  235. ; INF LOGIC
  236. ;
  237.  
  238. [Shell Commands]
  239.  
  240.     set-title "Windows NT Setup"
  241.     set-subst CR = "\r"
  242.     set-subst LF = "\n"
  243.     set STF_LANGUAGE = ENG
  244.     read-syms Strings
  245.     shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard1)
  246.     set BillboardPushed = TRUE
  247.  
  248.     set !LIBHANDLE      = ""
  249.     set !PATCHLIBHANDLE = ""
  250.  
  251.     ;
  252.     ; Initialize Library support for the inf
  253.     ;
  254.  
  255.     install   LoadSetupLibrary
  256.  
  257.     ;
  258.     ; find out the essential information about the installed hardware and
  259.     ; software
  260.     ;
  261.  
  262.     read-syms ProductType
  263.     ifstr(i) $(!STF_PLATFORM) == I386
  264.         set STF_PRNPLATFORM = "w32x86"
  265.     else-ifstr(i) $(!STF_PLATFORM) == Mips
  266.         set STF_PRNPLATFORM = "w32mips"
  267.     else-ifstr(i) $(!STF_PLATFORM) == Alpha
  268.         set STF_PRNPLATFORM = "w32alpha"
  269.     endif
  270.  
  271.     read-syms UiVars
  272.     detect    UiVars
  273.  
  274.     ;
  275.     ; if the Platform is not the same as the one supported by this patch
  276.     ; diskette, inform the user and quit
  277.     ;
  278.     ifstr(i) $(STF_PLATFORM) != $(STF_PLATFORMDET)
  279.          ifstr(i) $(BillboardPushed) == TRUE
  280.              shell "subroutn.inf" PopBillboard
  281.              set BillboardPushed = FALSE
  282.          endif
  283.          shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String1)
  284.          goto patchnotdone
  285.     endif
  286.  
  287.     ;
  288.     ; Check to make sure we have admin privileges, if not print fatal error
  289.     ;
  290.  
  291.     shell "registry.inf" CheckSetupModify
  292.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  293.         ; DEBUG
  294.         ;
  295.         ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Failed to shell CheckSetupModify"
  296.         ;
  297.         ; DEBUG END
  298.         ifstr(i) $(BillboardPushed) == TRUE
  299.             shell "subroutn.inf" PopBillboard
  300.             set BillboardPushed = FALSE
  301.         endif
  302.  
  303.         Debug-Output "shelling CheckSetupModify failed"
  304.         goto patchnotdone
  305.     else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
  306.         ifstr(i) $(BillboardPushed) == TRUE
  307.             shell "subroutn.inf" PopBillboard
  308.             set BillboardPushed = FALSE
  309.         endif
  310.         shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(String4)
  311.         goto patchnotdone
  312.     endif
  313.  
  314.  
  315.     ;
  316.     ; Initialize the patch library support for the inf
  317.     ;
  318.  
  319.     install   LoadPatchLibrary
  320.  
  321.  
  322.     ;
  323.     ; Get the build and patch version for the system.  If this is more than our patch
  324.     ; version warn the user, allowing him to exit
  325.     ;
  326.  
  327.     LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckBuildVersion $(!STF_BUILDVER)
  328.     ifstr(i) $(STATUS) == ERROR
  329.         goto patchnotdone
  330.     else-ifstr(i) $(STATUS) == NO
  331.         shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING $(String8)
  332.         ifstr(i) $($R1) == "OK"
  333.             goto skip_patchvercheck
  334.         else
  335.             goto patchnotdone
  336.         endif
  337.     endif
  338.  
  339.     shell "" GetCSDVersion
  340.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  341.         ifstr(i) $(BillboardPushed) == TRUE
  342.             shell "subroutn.inf" PopBillboard
  343.             set BillboardPushed = FALSE
  344.         endif
  345.         Debug-Output "PATCH.INF: Shelling GetCSDVersion failed"
  346.         goto patchnotdone
  347.     endif
  348.  
  349.     ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
  350.         Debug-Output "PATCH.INF: GetCSDVersion failed to return a value"
  351.     else
  352.         ifint $($R1) > $(!STF_CSDVER)
  353.             ifstr(i) $(BillboardPushed) == TRUE
  354.                 shell "subroutn.inf" PopBillboard
  355.                 set BillboardPushed = FALSE
  356.             endif
  357.             shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING $(String8)
  358.             ifstr(i) $($R1) == "OK"
  359.             else
  360.                 goto patchnotdone
  361.             endif
  362.         endif
  363.     endif
  364.  
  365. skip_patchvercheck = +
  366.  
  367.     ;
  368.     ; Get the NT DRIVE
  369.     ;
  370.  
  371.     GetDriveInPath !STF_NTDRIVE $(!STF_WINDOWSSYSPATH)
  372.  
  373.     ;
  374.     ; Find the hal and osloader destination on Mips and Alpha
  375.     ;
  376.  
  377.     ifstr(i) $(!STF_PLATFORM) == I386
  378.         set STF_HALDEST = $(!STF_WINDOWSSYSPATH)
  379.         set STF_OSLDEST = C:\
  380.  
  381.     else
  382.  
  383.         read-syms NVRAMVars
  384.         detect    NVRAMVars
  385.         LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetOsLoaderDest         +
  386.                                                          $(SystemPartition) +
  387.                                                          $(OsLoader)        +
  388.                                                          $(OsLoadPartition) +
  389.                                                          $(OsLoadFilename)
  390.         ifstr(i) $(STATUS) == ERROR
  391.             goto patchnotdone
  392.         else
  393.             set STF_OSLDEST = $(STATUS)
  394.             set STF_HALDEST = $(STATUS)
  395.         endif
  396.     endif
  397.  
  398.     ;
  399.     ; Get the required information about keyed files
  400.     ;
  401.  
  402.     set KeyedClassKeys  = ^(FileKeyedClasses, 0)
  403.     set KeyedClassFiles = ^(FileKeyedClasses, 1)
  404.  
  405.     LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetFileTypes $(KeyedClassFiles)
  406.     ifstr(i) $(STATUS) == ERROR
  407.         goto patchnotdone
  408.     else-ifstr(i) $(STATUS) == SETUPLOGNOTPRESENT
  409.         shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String11)
  410.         goto patchnotdone
  411.     else
  412.         ForListDo $(KeyedClassKeys)
  413.             set $($)Type = *($(STATUS), $(#))
  414.         EndForListDo
  415.     endif
  416.  
  417.     ;
  418.     ; Warn the user about the patch process..
  419.     ;
  420.  
  421.     ifstr(i) $(BillboardPushed) == TRUE
  422.         shell "subroutn.inf" PopBillboard
  423.         set BillboardPushed = FALSE
  424.     endif
  425.  
  426.     shell "" QueryOkCancel $(String9)
  427.     ifstr(i) $($R1) == "OK"
  428.     else
  429.         goto patchnotdone
  430.     endif
  431.  
  432.     shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard2)
  433.     set BillboardPushed = TRUE
  434.  
  435.     ;
  436.     ; Run through the directory list adding files to the copy list
  437.     ;
  438.  
  439.     read-syms FileSections
  440.     set FileSectionsList = ^(FileSections, 0)
  441.     set MoveFileExList  = {}
  442.     set FileCopiedList  = {}
  443.     set NewFilePathList = {}
  444.  
  445.     set FileSource  = $(!STF_SRCDIR)
  446.  
  447.     ForListDo $(FileSectionsList)
  448.         set FileSection = $($)
  449.         set FileDest    = $($($))
  450.         set FileList    = ^($(FileSection), 0)
  451.         ForListDo $(FileList)
  452.             set FileKey = $($)
  453.             set File    = #($(FileSection), $(FileKey), 2)
  454.             set FileDestFullPath = $(FileDest)\$(File)
  455.  
  456.             ;
  457.             ; Check to see if file exists, if it is does not exist, it doesn't
  458.             ; need to be copied over
  459.  
  460.             LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
  461.             ifstr(i) $(STATUS) == YES
  462.  
  463.  
  464.                 ; DEBUG
  465.                 ;
  466.                 ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Examining to see if file opened excl: "$(FileDestFullPath)
  467.                 ;
  468.                 ; DEBUG END
  469.  
  470.                 LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
  471.                 ifstr(i) $(STATUS) == ERROR
  472.                     goto patchnotdone
  473.                 else
  474.                     ifstr(i) $(STATUS) == "YES"
  475.                         LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
  476.                         ifstr(i) $(NEWFILE) == ERROR
  477.                             goto patchnotdone
  478.                         else
  479.                             set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
  480.  
  481.                             ; DEBUG
  482.                             ;
  483.                             ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Adding to movefile ex list: "$(FileComp)
  484.                             ;
  485.                             ; DEBUG END
  486.  
  487.                             set MoveFileExList = >($(MoveFileExList), $(FileComp))
  488.                         endif
  489.                     else
  490.                         set NEWFILE = $(File)
  491.                     endif
  492.  
  493.                     ; DEBUG
  494.                     ;
  495.                     ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Copying File Section: "$(FileSection)" : Key: "$(FileKey)" Source: "$(FileSource)" Dest: "$(FileDest)" rename = "$(NEWFILE)
  496.                     ;
  497.                     ; DEBUG END
  498.  
  499.                     install Install-File
  500.                     set FileCopiedList  = >($(FileCopiedList),  $(File))
  501.                     set NewFilePathList = >($(NewFilePathList), $(FileDest)\$(NEWFILE))
  502.  
  503.                     ;
  504.                     ; Check to see if the file installed was on the primary drive
  505.                     ; or the winnt drive
  506.                     ;
  507.                     GetDriveInPath DestDrive $(FileDest)
  508.                     ifstr(i) $(DestDrive) == $(!STF_NTDRIVE)
  509.                         set AnyWinntFiles = YES
  510.                     else-ifstr(i) $(DestDrive) == $(!STF_PRIMARY)
  511.                         set AnyPrimaryFiles = YES
  512.                     endif
  513.  
  514.                 endif
  515.             endif
  516.         EndForListDo
  517.     EndForListDO
  518.  
  519.     ;
  520.     ; Add the keyed sections to the copy list
  521.     ;
  522.  
  523.     read-syms FilesKeyedSections
  524.     ForListDo $(KeyedClassKeys)
  525.         set FileSection = Files$($)
  526.         set FileDest    = $($(FileSection))
  527.         set FileKey     = $($($)Type)
  528.  
  529.         set KeyedClassChoices = ^(Files$($), 0)
  530.         ifcontains(i) $(FileKey) in $(KeyedClassChoices)
  531.             set File             = #(FileKeyedClasses, $($), 1)
  532.             set FileDestFullPath = $(FileDest)\$(File)
  533.             ;
  534.             ; Check to see if file exists, if it is does not exist, it doesn't
  535.             ; need to be copied over
  536.  
  537.             LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
  538.             ifstr(i) $(STATUS) == YES
  539.  
  540.  
  541.                 ; DEBUG
  542.                 ;
  543.                 ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Examining to see if file opened excl: "$(FileDestFullPath)
  544.                 ;
  545.                 ; DEBUG END
  546.  
  547.                 LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
  548.                 ifstr(i) $(STATUS) == ERROR
  549.                     goto patchnotdone
  550.                 else
  551.                     ifstr(i) $(STATUS) == "YES"
  552.                         LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
  553.                         ifstr(i) $(NEWFILE) == ERROR
  554.                             goto patchnotdone
  555.                         else
  556.                             set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
  557.  
  558.                             ; DEBUG
  559.                             ;
  560.                             ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Adding to movefile ex list: "$(FileComp)
  561.                             ;
  562.                             ; DEBUG END
  563.  
  564.                             set MoveFileExList = >($(MoveFileExList), $(FileComp))
  565.                         endif
  566.                     else
  567.                         set NEWFILE = $(File)
  568.                     endif
  569.  
  570.                     ; DEBUG
  571.                     ;
  572.                     ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "Copying File Section: "$(FileSection)" : Key: "$(FileKey)" Source: "$(FileSource)" Dest: "$(FileDest)" rename = "$(NEWFILE)
  573.                     ;
  574.                     ; DEBUG END
  575.  
  576.                     install Install-File
  577.                     set FileCopiedList  = >($(FileCopiedList),  $(File))
  578.                     set NewFilePathList = >($(NewFilePathList), $(FileDest)\$(NEWFILE))
  579.  
  580.                     ;
  581.                     ; Check to see if the file installed was on the primary drive
  582.                     ; or the winnt drive
  583.                     ;
  584.                     GetDriveInPath DestDrive $(FileDest)
  585.                     ifstr(i) $(DestDrive) == $(!STF_NTDRIVE)
  586.                         set AnyWinntFiles = YES
  587.                     else-ifstr(i) $(DestDrive) == $(!STF_PRIMARY)
  588.                         set AnyPrimaryFiles = YES
  589.                     endif
  590.  
  591.                 endif
  592.             endif
  593.  
  594.  
  595.  
  596.         endif
  597.     EndForListDo
  598.  
  599.  
  600.     ifstr(i) $(BillboardPushed) == TRUE
  601.         shell "subroutn.inf" PopBillboard
  602.         set BillboardPushed = FALSE
  603.     endif
  604.  
  605.     ;
  606.     ; Do the copy
  607.     ;
  608.  
  609.     read-syms ProgressCopy$(!STF_LANGUAGE)
  610.     install   Install-DoCopy
  611.     ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
  612.         goto patchnotdone
  613.     else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
  614.         goto patchnotdone
  615.     endif
  616.  
  617.     ;
  618.     ; set up for setacl conversion if any primary files were copied and the
  619.     ; primary drive is NTFS or if any winnt files were copied and the winnt
  620.     ; drive is NTFS
  621.     ;
  622. setaclsonfiles=+
  623.     Debug-Output "SETUP.INF: Setting up for conversion and setacl if necessary."
  624.  
  625.     set Fs_C     = *($(VolumeFSList), ~($(VolumeList), $(!STF_PRIMARY)))
  626.     set Fs_Winnt = *($(VolumeFSList), ~($(VolumeList), $(!STF_NTDRIVE)))
  627.  
  628.     shell "" SetAcls $(AnyPrimaryFiles) $(AnyWinntFiles) $(Fs_C) $(Fs_Winnt)
  629.  
  630.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  631.         Debug-Output "SETUP.INF: Shelling SetAcls failed"
  632.         goto patchnotdone
  633.     else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
  634.         shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "NONFATAL" $(String5)
  635.     endif
  636.  
  637.     ;
  638.     ; Process MoveFileExList
  639.     ;
  640.  
  641.     ForListDo $(MoveFileExList)
  642.         ;
  643.         set ExistingPath = *($($), 1)
  644.         set NewPath      = *($($), 2)
  645.  
  646.         ; DEBUG
  647.         ;
  648.         ;shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "STATUS" "CopyFileOnReboot "$(ExistingPath)" to "$(NewPath)
  649.         ;
  650.         ; DEBUG END
  651.  
  652.         LibraryProcedure STATUS, $(!PATCHLIBHANDLE), CopyFileOnReboot $(ExistingPath) $(NewPath)
  653.         ifstr(i) $(STATUS) == ERROR
  654.             goto patchnotdone
  655.         endif
  656.     EndForListDo
  657.  
  658.     ;
  659.     ; BUGBUG The repair disk update is not accurate so skip doing the
  660.     ; repair stuff.
  661.     ;
  662.  
  663.     goto patchdone
  664.  
  665.     ;
  666.     ; patch the emergency repair diskette
  667.     ;
  668.     ;
  669.  
  670.     ; Make sure there is a floppy drive on the machine -- use the one with
  671.     ; the lowest drive letter (usually A:).
  672.     ;
  673.  
  674.     ifstr(i) $(DisketteList) == {}
  675.         shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) NONFATAL $(String6)
  676.         goto patchdone
  677.     endif
  678.     set RepairDiskette = *($(DisketteList),1)
  679.  
  680.     ;
  681.     ; prompt for the emergency repair diskette
  682.     ;
  683.  
  684. askrepair=+
  685.     shell "" QueryOkCancel  $(String7)$(RepairDiskette)$(String10)
  686.     ifstr(i) $($R1) == "OK"
  687.     else
  688.         goto patchdone
  689.     endif
  690.  
  691.     ;
  692.     ; check for the repair.inf file.  if not found tell the user and ask repair
  693.     ; diskette again
  694.     ;
  695.  
  696.     LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(RepairDiskette)\repair.inf
  697.     ifstr(i) $(STATUS) == YES
  698.     else
  699.         goto askrepair
  700.     endif
  701.  
  702.     shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard3)
  703.     set BillboardPushed = TRUE
  704.  
  705.     ;
  706.     ; change the repair.inf on the diskette to fix the checksums
  707.     ;
  708.  
  709.     LibraryProcedure STATUS, $(!PATCHLIBHANDLE), FixRepairInf $(RepairDiskette)\repair.inf $(FileCopiedList) $(NewFilePathList)
  710.     ifstr(i) $(STATUS) == ERROR
  711.         goto patchnotdone
  712.     endif
  713.  
  714. patchdone =+
  715.     ifstr(i) $(BillboardPushed) == TRUE
  716.         shell "subroutn.inf" PopBillboard
  717.         set BillboardPushed = FALSE
  718.     endif
  719.  
  720.     ;
  721.     ; store the patch version applied
  722.     ;
  723.  
  724.     shell "" CSDVersionCreate $(!STF_CSDVER)
  725.     read-syms SetupDoneDlg$(!STF_LANGUAGE)
  726.     ui start "SetupDone"
  727.     ifstr(i) $(DLGEVENT) == "CONTINUE"
  728.         ui pop 1
  729.         goto rebootend
  730.     else
  731.         ui pop 1
  732.         goto finish1
  733.     endif
  734.  
  735. patchnotdone =+
  736.     ifstr(i) $(BillboardPushed) == TRUE
  737.         shell "subroutn.inf" PopBillboard
  738.         set BillboardPushed = FALSE
  739.     endif
  740.  
  741.     shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String2)
  742.     goto finish1
  743.  
  744. finish1 =+
  745.     ;
  746.     ; Free the library support
  747.     ;
  748.  
  749.     install   FreeSetupLibrary
  750.  
  751. finish =+
  752.  
  753.     install   FreePatchLibrary
  754.     exit
  755.  
  756. rebootend =+
  757.     set Reboot = YES
  758.     install   Install-Shutdown
  759.     goto finish1
  760.     exit
  761.  
  762. ;-----------------------------------------------------------------------
  763. ;
  764. ; ROUTINE:     SetAcls
  765. ;
  766. ; DESCRIPTION: To set up registry for converting volumes and / or setting
  767. ;              acls if necessary
  768. ;
  769. ; INPUTS:      $($0): AnyPrimaryFiles
  770. ;              $($1): AnyWinntFiles
  771. ;              $($2): Fs_C
  772. ;              $($3): Fs_Winnt
  773. ;
  774. ; OUTPUTS:     $R0: STATUS: STATUS_SUCCESSFUL |
  775. ;                           STATUS_FAILED     |
  776. ;
  777. ;
  778. ;------------------------------------------------------------------------
  779.  
  780. [SetAcls]
  781.     set Status = STATUS_FAILED
  782.     set AnyPrimaryFiles = $($0)
  783.     set AnyWinntFiles   = $($1)
  784.     set Fs_C            = $($2)
  785.     set Fs_Winnt        = $($3)
  786.  
  787.     set AutoLines = {}
  788.     set SetAcl_C = NO
  789.     set SetAcl_Winnt = NO
  790.  
  791.     ifstr(i) $(SetAcl_C) == NO
  792.         ifstr(i) $(Fs_C) == NTFS
  793.             set SetAcl_C =  YES
  794.         endif
  795.     endif
  796.  
  797.     ifstr(i) $(SetAcl_Winnt) == NO
  798.         ifstr(i) $(Fs_Winnt) == NTFS
  799.             set SetAcl_Winnt =  YES
  800.         endif
  801.     endif
  802.  
  803.     ifstr(i) $(AnyPrimaryFiles) != "YES"
  804.         set SetAcl_C = NO
  805.     endif
  806.  
  807.     ifstr(i) $(AnyWinntFiles) != "YES"
  808.         set SetAcl_Winnt = NO
  809.     endif
  810.  
  811.  
  812.     ifstr(i) $(SetAcl_C) == YES
  813.         ifstr(i) $(SetAcl_Winnt) == YES
  814.             set AutoLines = >($(AutoLines), "setacl /a \DosDevices\"$(!STF_WINDOWSSYSPATH)"\winperms.txt \DosDevices\"$(!STF_NTDRIVE))
  815.         else
  816.             set AutoLines = >($(AutoLines), "setacl /c \DosDevices\"$(!STF_WINDOWSSYSPATH)"\winperms.txt")
  817.         endif
  818.     else-ifstr(i) $(SetAcl_Winnt) == YES
  819.         set AutoLines = >($(AutoLines), "setacl /w \DosDevices\"$(!STF_WINDOWSSYSPATH)"\winperms.txt \DosDevices\"$(!STF_NTDRIVE))
  820.     endif
  821.  
  822.     shell "registry.inf" AppendToBootExecute $(AutoLines)
  823.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  824.         Debug-Output "SETUP.INF: Shelling AppendToBootExecute failed"
  825.         goto finish_setacls
  826.     endif
  827.  
  828.     ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
  829.         Debug-Output "SETUP.INF: AppendToBootExecute failed"
  830.         goto finish_setacls
  831.     endif
  832.  
  833.     set Status = STATUS_SUCCESSFUL
  834. finish_setacls = +
  835.     Return $(Status)
  836.  
  837.  
  838.  
  839. ;-----------------------------------------------------------------------
  840. ; INSTALL HELPERS
  841. ;-----------------------------------------------------------------------
  842.  
  843. [LoadPatchLibrary]
  844.     LoadLibrary "x" patchdll.dll !PATCHLIBHANDLE
  845.     exit
  846.  
  847. [FreePatchLibrary]
  848.     ifstr(i) $(!PATCHLIBHANDLE) != ""
  849.         FreeLibrary $(!PATCHLIBHANDLE)
  850.     endif
  851.     exit
  852.  
  853. [LoadSetupLibrary]
  854.     LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE
  855.     exit
  856.  
  857. [FreeSetupLibrary]
  858.     ifstr(i) $(!LIBHANDLE) != ""
  859.         FreeLibrary $(!LIBHANDLE)
  860.     endif
  861.     exit
  862.  
  863. [Install-File]
  864.     set STF_VITAL = ""
  865.     AddSectionKeyFileToCopyList $(FileSection) $(FileKey) $(FileSource) $(FileDest)
  866.     exit
  867.  
  868. [Install-DoCopy]
  869.     CopyFilesInCopyList
  870.     exit
  871.  
  872.  
  873. [Install-Shutdown]
  874.     ;
  875.     LibraryProcedure STATUS,$(!LIBHANDLE),ShutdownSystem $(Reboot)
  876.     exit
  877.  
  878. ;-----------------------------------------------------------------------
  879. ; REGISTRY SUBROUTINES
  880. ;-----------------------------------------------------------------------
  881.  
  882. [RegistryConstants]
  883.  
  884.     MaskAllAccess          = 33554432
  885.     NoTitle                = 0
  886.     RegLastError           = $(!REG_ERROR_SUCCESS)
  887.  
  888. ;-----------------------------------------------------------------------
  889. ; ROUTINE:      CSDVersionCreate
  890. ;
  891. ; DESCRIPTION:  Creates an entry for the WinNT software.
  892. ;
  893. ; INPUTS:       $0:  CSD Version #
  894. ;
  895. ; OUTPUTS:      $R0: Status: STATUS_SUCCESSFUL
  896. ;                            STATUS_FAILED
  897. ;
  898. ;------------------------------------------------------------------------
  899.  
  900. [CSDVersionCreate]
  901.  
  902.     set Status = STATUS_FAILED
  903.     read-syms RegistryConstants
  904.  
  905.     ;
  906.     ; Modify the software tree..
  907.  
  908.     ;
  909.     ; Form the path up to the key
  910.     ;
  911.  
  912.     set KeyPath   = { +
  913.                      {SOFTWARE,       $(NoTitle), $(MaskAllAccess)}, +
  914.                      {Microsoft,      $(NoTitle), $(MaskAllAccess)}, +
  915.                      {"Windows NT",   $(NoTitle), $(MaskAllAccess)}, +
  916.                      {CurrentVersion, $(NoTitle), $(MaskAllAccess)}  +
  917.                     }
  918.  
  919.     ;
  920.     ; Form the value info structures for the WinNT entry
  921.     ;
  922.  
  923.     set KeyValues = { +
  924.                      {CSDVersion, $(NoTitle), $(!REG_VT_DWORD), $($0) } +
  925.                     }
  926.  
  927.  
  928.     shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
  929.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  930.         goto endCSDVersionCreate
  931.     endif
  932.     ifstr(i) $($R0) != STATUS_SUCCESSFUL
  933.         goto endCSDVersionCreate
  934.     else
  935.         CloseRegKey $($R1)
  936.     endif
  937.  
  938.     set Status = STATUS_SUCCESSFUL
  939. endCSDVersionCreate = +
  940.     Return $(Status)
  941.  
  942.  
  943.  
  944.  
  945. ;-----------------------------------------------------------------------
  946. ; ROUTINE:      GetCSDVersion
  947. ;
  948. ; DESCRIPTION:  Reads the software entry to find out what the CSD Patch Version
  949. ;               is
  950. ;
  951. ; INPUTS:       $0:  None
  952. ;
  953. ; OUTPUTS:      $R0: Status: STATUS_SUCCESSFUL
  954. ;                            STATUS_FAILED
  955. ;
  956. ;               $R1: CSDVersion
  957. ;
  958. ;------------------------------------------------------------------------
  959.  
  960. [GetCSDVersion]
  961.  
  962.     set Status = STATUS_SUCCESSFUL
  963.     read-syms RegistryConstants
  964.     set CSDVersion = 0
  965.  
  966.     ;
  967.     ; Open the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
  968.     ; key
  969.  
  970.     set KeyName = "Software\Microsoft\Windows NT\CurrentVersion"
  971.     OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
  972.     ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  973.         Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
  974.         goto end_GetCSDVersion
  975.     endif
  976.  
  977.     ;
  978.     ; read the sourcepath entry
  979.     ;
  980.  
  981.     GetRegValue $(KeyHandle) "CSDVersion" CSDVersionValue
  982.     ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  983.         CloseRegKey $(KeyHandle)
  984.         goto end_GetCSDVersion
  985.     endif
  986.  
  987.     set CSDVersion =  *($(CSDVersionValue), 4)
  988.     CloseRegKey $(KeyHandle)
  989. end_GetCSDVersion = +
  990.     Return $(Status) $(CSDVersion)
  991.  
  992. ;-----------------------------------------------------------------------
  993. ; ROUTINE:      QueryOkCancel
  994. ;
  995. ; DESCRIPTION:  This routine lets the user query OK / Cancel giving OK as
  996. ;               default
  997. ;
  998. ; INPUTS:       $0:  MessageText.
  999. ;
  1000. ; OUTPUTS:      $R0: STATUS:   STATUS_SUCCESSFUL |
  1001. ;                              STATUS_NOLANGUAGE
  1002. ;                              STATUS_FAILED
  1003. ;
  1004. ;               $R1: DLGEVENT: OK | CANCEL
  1005. ;
  1006. ;------------------------------------------------------------------------
  1007.  
  1008. [QueryOkCancel]
  1009.  
  1010.     set DlgText = $($0)
  1011.     read-syms QueryOKCancelDlg$(!STF_LANGUAGE)
  1012.  
  1013.     ui start "SetupMessage"
  1014.     ifstr(i) $(DLGEVENT) == "OK"
  1015.         set Status     = STATUS_SUCCESSFUL
  1016.         set UserAction = $(DLGEVENT)
  1017.  
  1018.     else-ifstr(i) $(DLGEVENT) == "CANCEL"
  1019.         set Status     = STATUS_SUCCESSFUL
  1020.         set UserAction = $(DLGEVENT)
  1021.     else
  1022.         set Status     = STATUS_FAILED
  1023.         set UserAction = "CANCEL"
  1024.     endif
  1025.     Return $(Status) $(UserAction)
  1026.  
  1027. [ProductType]
  1028. STF_PRODUCT  = Winnt
  1029. STF_PLATFORM = I386
  1030.  
  1031. ;
  1032. ; MEDIA AND FILE DESCRIPTIONS
  1033. ;
  1034.  
  1035. [Source Media Descriptions]
  1036.     1  = "Windows NT 3.1 Update Disk #1"  , TAGFILE = disk1
  1037.     2  = "Windows NT 3.1 Update Disk #2"  , TAGFILE = disk2
  1038.     3  = "Windows NT 3.1 Update Disk #3"  , TAGFILE = disk3
  1039.     4  = "Windows NT 3.1 Update Disk #4"  , TAGFILE = disk4
  1040.     5  = "Windows NT 3.1 Update Disk #5"  , TAGFILE = disk5
  1041.     6  = "Windows NT 3.1 Update Disk #6"  , TAGFILE = disk6
  1042.  
  1043. [Strings]
  1044.     String1 = "This update disk cannot be used on this platform."
  1045.     String2 = "Setup failed to update the system."
  1046.     String3 = "Setup has successfully updated your system."
  1047.     String4 = "You do not have permission to update the system.  Please contact your system administrator."
  1048.     String5 = "Setup failed to setup your updated files for secure operation."
  1049.     String6 = "No floppy disk drive was found on your computer. "+
  1050.               "Setup cannot modify the Emergency Repair Disk."
  1051.  
  1052.     String7 =  "If you created an Emergency Repair Disk during the initial installation"+
  1053.                " of Windows NT, please insert it into Drive "
  1054.  
  1055.     String10 = " and click OK to update the repair disk.  If you cannot locate the repair"+
  1056.                " disk, select Cancel and Setup will complete the installation."
  1057.  
  1058.     String8 = "Setup has detected that the version of the system installed is "+
  1059.               "newer than the update you are applying to it.  The update can render "+
  1060.               "your system unstartable.  Press OK if you still wish to continue "+
  1061.               "or press Cancel to exit Setup."
  1062.  
  1063.     String9 = "Setup is going to update files on your system.  If you wish to "+
  1064.               "cancel the update process, please press Cancel or press OK to continue."
  1065.  
  1066.     String11 = "Setup couldn't find the setup.log file in your windows directory. "+
  1067.                "Setup cannot proceed to update your system.  Please copy the repair.inf "+
  1068.                "file from your Emergency Repair Disk to your windows directory under the "+
  1069.                "name setup.log and restart the update."
  1070.  
  1071.     Billboard1 = "Please wait..."
  1072.     Billboard2 = "Please wait while the files to be updated are determined..."
  1073.     Billboard3 = "Please wait while the Emergency Repair Disk is updated..."
  1074.  
  1075. [ProgressCopyENG]
  1076.     ProCaption   = "Windows NT Setup"
  1077.     ProCancel    = "Cancel"
  1078.     ProCancelMsg = "The Windows NT 3.1 files are not completely updated.  Are you sure you want "+
  1079.                    "to cancel copying files?"
  1080.     ProCancelCap = "Setup Message"
  1081.     ProText1     = "Copying:"
  1082.     ProText2     = "To:"
  1083.  
  1084.  
  1085. [SetupDoneDlgENG]
  1086.     Caption     = "Windows NT Setup"
  1087.     DlgText     = "Windows NT 3.1 has been updated."$(!LF)$(!LF)+
  1088.                   "Remove disks from the floppy disk drives and "+
  1089.                   "choose Restart Computer to run the updated system."
  1090.     Reboot      = "&Restart Computer"
  1091.     Windows     = "E&xit to Windows NT"
  1092.     DlgType     = "Info"
  1093.     DlgTemplate = "REBOOT"
  1094.  
  1095. [QueryOKCancelDlgENG]
  1096.     STF_MB_TITLE = "Setup Message"
  1097.  
  1098.     ;no translation needed after this
  1099.  
  1100.     DlgType      = "MessageBox"
  1101.     STF_MB_TEXT  = $(DlgText)
  1102.     STF_MB_TYPE  = 2
  1103.     STF_MB_ICON  = 4
  1104.     STF_MB_DEF   = 1
  1105.